/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.intesal.seguridad.managed;

import java.util.List;
import javax.faces.bean.ManagedBean;
import org.primefaces.event.SelectEvent;
import sv.com.intesal.clases.abstracts.ViewScopedAbstract;
import sv.com.intesal.clases.others.FormularioName.SEGURIDAD.Procesos;
import sv.com.intesal.rrhh.bean.Empleado;
import sv.com.intesal.rrhh.controlador.EmpleadoControlador;
import sv.com.intesal.seguridad.bean.Usuario;
import sv.com.intesal.seguridad.controlador.RolesControlador;
import sv.com.intesal.seguridad.controlador.UsuarioControlador;

/**
 *
 * @author ejerez
 */
@ManagedBean(name = "usuarioManaged")
public class UsuarioManaged extends ViewScopedAbstract {

    private Usuario selectedUsuario;
    private Empleado selectedEmpleado;
    private List<Usuario> usuarios;

    public UsuarioManaged() {
        this.selectedUsuario = new Usuario();
        this.usuarios = null;
    }

    public void fillGrid() {
        try {
            if (this.usuarios == null) {
                if (sm.validar_rol_usuario(Procesos.wfrmUsuario, sm.buscar) == true) {
                    UsuarioControlador uc = new UsuarioControlador();
                    this.usuarios = uc.getUsuarios();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void completeTransaction() {
        try {
            if (this.validar() == true) {
                if (this.selectedUsuario.getCodigo_u() == null) {
                    if (sm.validar_rol_usuario(Procesos.wfrmUsuario, sm.agregar) == true) {
                        this.selectedUsuario.setCodigo_e(this.selectedEmpleado.getCodigo_e());

                        UsuarioControlador uc = new UsuarioControlador();
                        uc.insert(this.selectedUsuario);
                        m.messageInfo(m.getIinformation());
                        lm.limpiar();
                    }
                } else {
                    if (sm.validar_rol_usuario(Procesos.wfrmUsuario, sm.modificar) == true) {
                        this.selectedUsuario.setCodigo_e(this.selectedEmpleado.getCodigo_e());

                        UsuarioControlador uc = new UsuarioControlador();
                        uc.update(this.selectedUsuario);
                        m.messageInfo(m.getImodificada());
                        lm.limpiar();
                    }
                }
                RolesControlador rc = new RolesControlador();
                rc.insert();
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    private Boolean validar() throws Exception {
        try {
            Boolean var_return = true;

            if (this.selectedUsuario.getNombre_u().equals("")) {
                m.messageAdvertencia(m.campoError("NOMBRE"));
                var_return = false;
            }
            if (this.selectedUsuario.getClave_u().equals("")) {
                m.messageAdvertencia(m.campoError("CLAVE"));
                var_return = false;
            }
            if (this.selectedUsuario.getClave_confirmar_u().equals("")) {
                m.messageAdvertencia(m.campoError("CONFIRMAR CLAVE"));
                var_return = false;
            }

            if (this.selectedEmpleado == null) {
                m.messageAdvertencia(m.campoError("EMPLEADO"));
                var_return = false;
            } else if (this.selectedEmpleado.getCodigo_e() == null) {
                m.messageAdvertencia(m.campoError("EMPLEADO"));
                var_return = false;
            }

            if (var_return == true) {
                /*VALIDAR CLAVE*/
                if (this.selectedUsuario.getClave_u().toString().equals(this.selectedUsuario.getClave_confirmar_u().toString())) {
                    var_return = true;
                } else {
                    m.messageError("LAS CLAVE DEBEN SER IGUALES");
                    var_return = false;
                }
            }

            if (var_return == true) {
                /*VALIDAR USER*/
                if (this.selectedUsuario.getCodigo_u() == null) {
                    /*INSERT. VALIDAR USER*/
                    UsuarioControlador uc = new UsuarioControlador();
                    if (uc.validarUserCount(this.selectedUsuario) == false) {
                        m.messageError("El NOMBRE DEL USUARIO INGRESADO YA EXISTE");
                        var_return = false;
                    }
                } else {
                    /*MODIFICAR. VALIDAR USER CON CODIGO DE USUARIO*/
                    UsuarioControlador uc = new UsuarioControlador();
                    if (uc.validarCodigo_Usuario(this.selectedUsuario) == false) {
                        if (uc.validarUserCount(this.selectedUsuario) == false) {
                            m.messageError("El NOMBRE DEL USUARIO INGRESADO YA EXISTE");
                            var_return = false;
                        }
                    }
                }

            }


            return var_return;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void getQuickEmpleado(Empleado em) {
        try {
            this.selectedEmpleado = em;
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void rowSelectListener(SelectEvent event) {

        try {
            Usuario u = ((Usuario) event.getObject());
            EmpleadoControlador ec = new EmpleadoControlador();
            this.selectedEmpleado = ec.getEmpleado(u.getCodigo_e());
        } catch (Exception e) {
            m.messageError(m.getIerror());
            e.printStackTrace();
        }
    }

    /*SETTERS AND GETTERS*/
    public Empleado getSelectedEmpleado() {
        return selectedEmpleado;
    }

    public void setSelectedEmpleado(Empleado selectedEmpleado) {
        this.selectedEmpleado = selectedEmpleado;
    }

    public Usuario getSelectedUsuario() {
        if (selectedUsuario == null) {
            selectedUsuario = new Usuario();
        }
        return selectedUsuario;
    }

    public void setSelectedUsuario(Usuario selectedUsuario) {
        this.selectedUsuario = selectedUsuario;
    }

    public List<Usuario> getUsuarios() {
        return usuarios;
    }

    public void setUsuarios(List<Usuario> usuarios) {
        this.usuarios = usuarios;
    }
}
